package com.lill.support.config;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import com.lill.support.aspect.CurrentUserParamResolver;
import com.lill.support.aspect.HandlerParamDecodeResolver;
import com.lill.support.aspect.HandlerTokenOnceResolver;
import com.lill.support.aspect.HandlerTokenTwiceResolver;

@SuppressWarnings("deprecation")
@Configuration
public class ParamCustomConfigAdapter extends WebMvcConfigurerAdapter /*implements WebMvcConfigurer*/ {
	static final String ORIGINS[] = new String[] { "GET", "POST", "PUT", "DELETE" };
	@Autowired
	private CurrentUserParamResolver currentUserResolver;
	@Autowired
	private HandlerParamDecodeResolver paramDecodeResolver;
	@Autowired
	private HandlerTokenOnceResolver tokenOnceResolver;
	@Autowired
	private HandlerTokenTwiceResolver tokenTwiceResolver;
	
	public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
		resolvers.add(currentUserResolver);
		resolvers.add(paramDecodeResolver);
		resolvers.add(tokenOnceResolver);
		resolvers.add(tokenTwiceResolver);
		super.addArgumentResolvers(resolvers);
	}
	//处理跨域
//	@Bean
//	public Filter getCORSFilter(){
//		return new CORSFilter();
//	}
	
	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
		registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
		registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
	}
	
	@SuppressWarnings({ "unchecked", "rawtypes" })
	@Bean
    public ServletRegistrationBean<?> druidStatViewServlet(){
        //org.springframework.boot.context.embedded.ServletRegistrationBean提供类的进行注册.
		ServletRegistrationBean<?> servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");

        //添加初始化参数：initParams
//        servletRegistrationBean.addInitParameter("allow","127.0.0.1");
        //IP黑名单 (存在共同时，deny优先于allow) : 如果满足deny的话提示:Sorry, you are not permitted to view this page.
//        servletRegistrationBean.addInitParameter("deny","192.168.1.73");
        //登录查看信息的账号密码.
//        servletRegistrationBean.addInitParameter("loginUsername","admin");
//        servletRegistrationBean.addInitParameter("loginPassword","123456");
        //是否能够重置数据.
        servletRegistrationBean.addInitParameter("resetEnable","false");
        return servletRegistrationBean;
    }

    /**
     * 注册一个：filterRegistrationBean
     * @return
     */
	@SuppressWarnings({ "unchecked", "rawtypes" })
	@Bean
    public FilterRegistrationBean<?> druidStatFilter(){
        FilterRegistrationBean<?> filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
        //添加过滤规则.
        filterRegistrationBean.addUrlPatterns("/*");
        //添加不需要忽略的格式信息.
        filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        return filterRegistrationBean;
    }
}
